package com.trinity.service;

import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
import com.trinity.common.core.domain.AjaxResult;
import com.trinity.common.core.domain.entity.WxUser;
import me.chanjar.weixin.common.error.WxErrorException;

import java.util.List;

/**
 * 微信用户Service接口
 *
 * @author trinity
 * @date 2023-07-24
 */
public interface IWxUserService {
    /**
     * 查询微信用户
     *
     * @param userId 微信用户主键
     * @return 微信用户
     */
    public WxUser selectWxUserByUserId(Long userId);


    /**
     * 查询微信用户
     *
     * @param openId openId
     * @return 微信用户
     */
    public WxUser selectWxUserByOpenId(String openId);

    /**
     * 查询微信用户列表
     *
     * @param wxUser 微信用户
     * @return 微信用户集合
     */
    public List<WxUser> selectWxUserList(WxUser wxUser);

    /**
     * 新增微信用户
     *
     * @param wxUser 微信用户
     * @return 结果
     */
    public int insertWxUser(WxUser wxUser);

    /**
     * 修改微信用户
     *
     * @param wxUser 微信用户
     * @return 结果
     */
    public int updateWxUser(WxUser wxUser);

    /**
     * 批量删除微信用户
     *
     * @param userIds 需要删除的微信用户主键集合
     * @return 结果
     */
    public int deleteWxUserByUserIds(Long[] userIds);

    /**
     * 删除微信用户信息
     *
     * @param userId 微信用户主键
     * @return 结果
     */
    public int deleteWxUserByUserId(Long userId);


    /**
     * 根据手机号码判断用户是否存在
     *
     * @param phone 手机号码
     * @return 结果
     */
    public boolean checkUserByPhone(String phone);

    /**
     * 校验手机号码是已经绑定微信用户
     *
     * @param phone 手机号码
     * @return 结果
     */
    public boolean checkPhoneIsBundled(String phone);

    /**
     * 绑定微信用户
     *
     * @param openid wxUser
     */
    public void bundledWxUser(String phone, String openid);

    /**
     * 绑定微信用户

     * @param openid openid
     * @return 结果
     */
    String createToken( String openid,String sessionKey);

    /**
     * 获取微信用户openid
     *
     * @param appid appid
     * @param code  code
     * @return 结果
     */
    public WxMaJscode2SessionResult getSession(String appid, String code);

    boolean register(String openId,String phone,String password);

    AjaxResult wxLongByAppidAndCode(String appid, String code,String phone) throws WxErrorException;
}
